import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class Example2_UrlEncoding {
	public static void main(String[] args) {
		// 包含特殊字元的字串
		String originalString = "hello world!";
		System.out.println("原始字串: " + originalString);
		// 步驟1: 標準的 URL 編碼
		String standardEncoded = urlEncode(originalString);
		System.out.println("標準 URL 編碼後: " + standardEncoded);
		// 步驟2:.NET 風格 URL 編碼
		String netEncoded = netUrlEncode(standardEncoded);
		System.out.println("特規編碼後: " + netEncoded);
		// 觀察重點:
		// 1. 空格變成了 "+"
		// 2. "!" 編碼成 "%21","(" 編碼成 "%28",")" 編碼成 "%29"
		// 3. netUrlEncode 又把 %21, %28, %29 換回了 !, (, ),這是 ECPay 的特殊規定
	}
	/**
	 * 將資料做 urlEncode編碼
	 */
	public static String urlEncode(String data) {
		String result = "";
		try {
			// 使用 UTF-8 編碼
			result = URLEncoder.encode(data, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return result;
	}
	/**
	 * 將做完的urlEncode字串做轉換符合 .NET語言的轉換規則
	 */
	private static String netUrlEncode(String url) {
		String netUrlEncode = url.replaceAll("%21", "\\!").replaceAll("%28", "\\(").replaceAll("%29", "\\)");
		return netUrlEncode;
	}
}
參考資料
https://developers.ecpay.com.tw/